package verins.DAO;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import verins.BO.LogBO;
import verins.beans.Log;
import verins.beans.Usuario;

public class UsuarioDAO {

      public boolean save(Usuario usuario){
          try{
              Log entrada=null;
              // Create the EntityManager
              EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
              EntityManager em = emf.createEntityManager();

              if (usuario.getIdusuario()==null){
                  usuario.setIdusuario(new Integer(0));
              }

              em.getTransaction().begin();
              //System.out.println(usuario.getIdusuario());
              if (usuario.getIdusuario()==0){
                  em.persist(usuario);
                  entrada=LogBO.crearEntradaLogSeguimiento(usuario.getIdusuario(), 0, verins.Utils.Constantes.LSEG_REGISTRO, "Se registró el usuario: "+usuario.getNombreusuario());
              } else{
                  em.merge(usuario);
                  entrada=LogBO.crearEntradaLogSeguimiento(usuario.getIdusuario(), 0, verins.Utils.Constantes.LSEG_MODIFICACION, "Se modificó el usuario: "+usuario.getNombreusuario());
              }

              em.getTransaction().commit();
              em.close();
              emf.close();

              LogBO.registrarLog(entrada);
              return true;
          }catch(Exception ex){
              JOptionPane.showMessageDialog(null, "Error al grabar datos"+ex.getMessage());
              return false;
          }
      }

    public boolean delete(Usuario usuario){
          try{
            // Create the EntityManager
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();

            if (usuario.getIdusuario()==null){
                usuario.setIdusuario(new Integer(0));
            }

            em.getTransaction().begin();
            //System.out.println(usuario.getIdusuario());
            Usuario userx = em.find(Usuario.class, usuario.getIdusuario());
            em.remove(userx);

            em.getTransaction().commit();
            em.close();
            emf.close();
            return true;
          }catch(Exception ex){
              JOptionPane.showMessageDialog(null, "Error al grabar datos"+ex.getMessage());
              return false;
          }
    }

    public List findAll(){
        List lista=null;
        try{

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            Query query=em.createNamedQuery("Usuario.findAll");

            lista=query.getResultList();

            if (em.getTransaction().isActive())
                em.getTransaction().commit();
            em.close();
            emf.close();

            return lista;

        }catch(Exception ex){

        }
        return lista;
    }

    public List findUsers(Usuario usuario){
        List lista=null;
        try{

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            String strSelect = "SELECT u FROM Usuario u WHERE upper(u.nombreusuario) like '%"+usuario.getNombreusuario().toUpperCase()+"%' AND upper(u.nombre) like '%"+usuario.getNombre().toUpperCase()+"%' AND upper(u.apellido) like '%"+usuario.getApellido().toUpperCase()+"%'";
            if (usuario.getRol().getIdrol()!=-1){
                strSelect= strSelect + " AND u.rol = :rol";
            }
            Query query=em.createQuery(strSelect);

            if (usuario.getRol().getIdrol()!=-1){
                query.setParameter("rol", usuario.getRol());
            }


            lista=query.getResultList();
            if (em.getTransaction().isActive())
                em.getTransaction().commit();
            em.close();
            emf.close();

            return lista;

        }catch(Exception ex){
            System.out.println(ex.getMessage());
        }
        return lista;
    }


     public Usuario findById(int id){
        Usuario proceso=null;
        try{

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            proceso = em.find(Usuario.class, id);
            em.getTransaction().commit();
            em.close();
            emf.close();
        }catch(Exception ex){

        }
        return proceso;
    }

    public Usuario findByNombreUsuario(Usuario usuario){
        Usuario resultado=null;
        try{
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("verinsPU");
            EntityManager em = emf.createEntityManager();
            Query query=em.createNamedQuery("Usuario.findByNombreusuario");
            query.setParameter("nombreusuario", usuario.getNombreusuario());
            resultado = (Usuario)query.getSingleResult();
            if (!usuario.getContrasenha().equals(resultado.getContrasenha()))
                    resultado=null;
            if (em.getTransaction().isActive())
                em.getTransaction().commit();
            em.close();
            emf.close();
        }catch(Exception ex){
            System.out.println(ex.getMessage());
        }
        return resultado;
    }

}
